home *** CD-ROM | disk | FTP | other *** search
- section TestFont,code_c
- OpenLibrary equ -552 ; _LVO values
- CloseLibrary equ -414
- AllocRaster equ -492
- FreeRaster equ -498
-
- CUSTOM equ $dff000
- VHPOSR equ $006 ; Hardware stuff
- BPL1PTH equ $0E0
- BPL1PTL equ $0E2
- BPL2PTH equ $0E4
- BPL2PTL equ $0E6
- BPL3PTH equ $0E8
- BPL3PTL equ $0EA
- BPL1MOD equ $108
- BPL2MOD equ $10A
- BPLCON0 equ $100
- BPLCON1 equ $102
- BLTAPTH equ $050
- BLTDPTH equ $054
- BLTAFWM equ $044
- BLTALWM equ $046
- BLTCON0 equ $040
- BLTCON1 equ $042
- BLTAMOD equ $064
- BLTDMOD equ $066
- BLTSIZE equ $058
- COLOR00 equ $180
- COLOR01 equ $182
- COLOR02 equ $184
- COLOR03 equ $186
- COLOR04 equ $188
- COLOR05 equ $18A
- COLOR06 equ $18C
- COLOR07 equ $18E
- DIWSTRT equ $08E
- DIWSTOP equ $090
- DDFSTRT equ $092
- DDFSTOP equ $094
- DMACON equ $096
- DMACONR equ $002
- PLANESIZE equ 44*200
-
- move.l $4.w,a6 Open graphics library
- move.l #GfxName,a1
- moveq #0,d0
- jsr OpenLibrary(a6)
- tst.l d0
- beq Error
- move.l d0,GfxBase (save base pointer)
- move.l GfxBase,a6 Now grab some screen
- move.l #352,d0 memory for 3 planes
- move.l #(200*3),d1
- jsr AllocRaster(a6)
- move.l d0,ScreenMem
- beq Error
- move.l #BPL1,a0 Put bitplane addresses in
- moveq #2,d1 copper list
- CprLoop move.w d0,6(a0)
- swap d0
- move.w d0,2(a0)
- swap d0
- addi.l #PLANESIZE,d0
- lea 8(a0),a0
- dbf d1,CprLoop
- move.l ScreenMem,a0 Clear the screen
- moveq #0,d0
- move.w #(3*352/8*200/4-1),d0
- ClrLoop clr.l (a0)+
- dbra d0,ClrLoop
- move.l #Font,a0 Add some colour
- move.w (a0)+,c00
- move.w (a0)+,c01
- move.w (a0)+,c02
- move.w (a0)+,c03
- move.w (a0)+,c04
- move.w (a0)+,c05
- move.w (a0)+,c06
- move.w (a0)+,c07
- move.l GfxBase,a0
- move.l $32(a0),CopperSave Save old copper list...
- move.l #CopperList,$32(a0) ...and put in ours
- Loop:
- cmp.b #$FF,VHPOSR+CUSTOM Wait for vertical blank
- bne.s Loop
- bsr Scrolly
- andi.b #$40,$bfe001 Test left mouse button
- bne Loop - if down, exit...
- move.l GfxBase,a6 Restore the old screen
- move.l CopperSave,$32(a6)
- move.l GfxBase,a6 Give back screen memory
- move.l ScreenMem,a0
- move.l #352,d0
- move.l #3*200,d1
- jsr FreeRaster(a6)
- move.l $4.w,a6
- move.l GfxBase,a1
- jsr CloseLibrary(a6) Close gfx library
- moveq #0,d0
- Error: ;Bye bye!
- rts
-
- Scrolly: ;The scrolling message
- addi.w #1,Count A new letter every 10 frames
- cmpi.w #10,Count Draw one ?
- bne DoScroll No - Just do scroll
- clr.w Count
- move.l Letter,a0
- tst.b (a0) End of message ?
- bne.s CharOK Skip if not
- move.l #Message,a0 Reset pointer
- CharOK:
- moveq #0,d0
- move.b (a0)+,d0 Get next letter
- move.l a0,Letter Save pointer
- sub.b #" ",d0 Get letter in font range
- mulu #32*2*2*3,d0 1 char=3*128 bytes
- move.l #Font,a0
- add.l d0,a0 Get offset in font table
- add.l #16,a0 Skip past colour info
- bsr PlotChar
- DoScroll:
- bsr WaitBlit
- move.l ScreenMem,d0 Plane 1
- bsr.s Scroll
- bsr WaitBlit
- move.l ScreenMem,d0
- addi.l #PLANESIZE,d0 Plane 2
- bsr.s Scroll
- bsr WaitBlit
- move.l ScreenMem,d0
- addi.l #PLANESIZE*2,d0 Plane 3
- bsr.s Scroll
- rts
- Scroll: ; Blit scroll
- lea CUSTOM,a2
- addi.l #140*44+42,d0
- move.w #$49f0,BLTCON0(a2) 4 pixels,use A & D,LF=copy
- move.w #$0002,BLTCON1(a2) Descending mode
- move.l d0,BLTAPTH(a2) Store scroll start
- move.l d0,BLTDPTH(a2)
- move.w #0,BLTAMOD(a2) No modulo
- move.w #0,BLTDMOD(a2)
- move.w #$ffff,BLTAFWM(a2) All the bits on the left
- move.w #$fff0,BLTALWM(a2) Mask 1st 4 bits on right
- bsr.s WaitBlit Patience!
- move.w #$c16,BLTSIZE(a2) Do blit
- rts
- WaitBlit: ; Wait for blitter to finish
- btst.b #6,DMACONR+CUSTOM
- .loop
- btst.b #6,DMACONR+CUSTOM
- bne .loop
- rts
-
- PlotChar
- moveq #0,d1
- CLoop move.l ScreenMem,a1
- move.w #PLANESIZE,d2
- mulu d1,d2
- addi.l #(105*44+40),d2 Calculate start address
- add.l d2,a1
- moveq #31,d0 32 lines
- Plot move.l (a0)+,(a1) Copy data
- lea 44(a1),a1
- dbf d0,Plot
- addq #1,d1 Next plane
- cmpi #3,d1 All done?
- bne.s CLoop
- rts
- ScreenMem
- dc.l 0
- GfxName:
- dc.b "graphics.library",0
- even
- GfxBase:
- dc.l 0
- CopperSave:
- dc.l 0
- CopperList:
- BPL1 dc.w BPL1PTH,$0000
- dc.w BPL1PTL,$0000
- BPL2 dc.w BPL2PTH,$0000
- dc.w BPL2PTL,$0000
- BPL3 dc.w BPL3PTH,$0000
- dc.w BPL3PTL,$0000
- dc.w BPLCON0,$3200
- dc.w BPLCON1,$0000
- dc.w BPL1MOD,$0004
- dc.w BPL2MOD,$0004
- dc.w DDFSTRT,$0038
- dc.w DDFSTOP,$00D0
- dc.w DIWSTRT,$2C81
- dc.w DIWSTOP,$F4C1
- dc.w COLOR00
- c00 dc.w 0
- dc.w COLOR01
- c01 dc.w 0
- dc.w COLOR02
- c02 dc.w 0
- dc.w COLOR03
- c03 dc.w 0
- dc.w COLOR04
- c04 dc.w 0
- dc.w COLOR05
- c05 dc.w 0
- dc.w COLOR06
- c06 dc.w 0
- dc.w COLOR07
- c07 dc.w 0
- dc.w $ffff,$fffe ; End of copper list
-
- Letter dc.l Message
- Count dc.w 0
- Message dc.b "!$%&*()-+=\/.,><;:@#0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",0
- even
- Font:
- ; v-------Put your own module name in here
- incbin "df1:myfont.mod"
-